Google Cloud初心者のAWSユーザーがMackerelにGoogle Cloudインテグレーションを設定してみる #mackerelio
みなさん、観測してますか!(挨拶
本記事は Mackerel Advent Calendar 2020 の 21 日目の記事です。
はやいもので、Mackerel が Google Cloud インテグレーションをリリースしてから 3 ヶ月が過ぎようとしています。
これまで Google Cloud は触ってみたいと思いつつ、なかなかさわる機会もなかったのですが、今回のアドベントカレンダーのネタとしてインテグレーションを設定してみました。
とにかく初めてさわるものなので、ドキュメントは参考程度に思うがままに設定追加してみたいと思います。
Google Cloud ということはCloud Shell で操作すれば良い、ということくらいはぼくでも知っているのでそこから始めます!
ドキュメント・参考資料
必要なことはここに全てかいてありますので、基本はこちらに従って操作します。
今回は基本 Cloud Shell での操作なので、このうち Cloud SDK を用いた連携方法 を参照すればいいということですね。
各gcloud
コマンドの意味は、↓のドキュメントを眺めながら読み解いていきます。
手順
今回は、Google Cloud の Compute Engine インスタンス 1 台を監視することを目標とします。
やることは AWS インテグレーションと大きくは変わりません。流れとしては以下となります。
- Google Cloud 側で、Mackerel がアクセスするための認証情報を作成する
- (OPTIONAL) Google Cloud 上で監視したいリソースにラベルを付ける
- (OPTIONAL) Mackerel で、Google Cloud のリソースを登録するためのサービス・ロールを用意する
- Mackerel にインテグレーションの設定をする
- (Compute リソースのみ) mackerel-agent を導入する
順にやっていきます!
Cloud Shell の起動とプロジェクト ID 設定
何はともあれ Cloud Shell を起動しましょう。
Mackerel の手順書だとここでコンフィグを作ることになっていますが、そもそも Cloud Shell の環境なんてディスポーザブルで一過性のものなので、気にせずそのまま進めます。
続く作業のために、Cloud Shell のプロジェクト設定をMackerel で監視したいプロジェクトにセットしておきます。
コンフィグは作っていないので、今回の場合は--configuration=NAME
の指定は不要ですね。このあとのコマンド群も同様です。
gcloud config set project <プロジェクト名>
Cloud Shell が承認を求めてきたら「承認」をクリックしてあげてください。
次に手順にしたがって、Mackerel が使う Cloud SDK API を有効化しておきます。めんどくさいのでfor
で回しました。
Compute Engine だけでなくて Cloud SQL と App Engine も有効にしてますが、気になる方は適当にいじってください。
for api in cloudresourcemanager monitoring compute sqladmin appengine do gcloud services enable ${api}.googleapis.com done
gcloud services list
で現状許可されている API のリストが見られます。有効化したものが表示されていたら成功ですね。
$ gcloud services list NAME TITLE appengine.googleapis.com App Engine Admin API bigquery.googleapis.com BigQuery API bigquerystorage.googleapis.com BigQuery Storage API cloudapis.googleapis.com Google Cloud APIs clouddebugger.googleapis.com Cloud Debugger API cloudresourcemanager.googleapis.com Cloud Resource Manager API cloudtrace.googleapis.com Cloud Trace API compute.googleapis.com Compute Engine API datastore.googleapis.com Cloud Datastore API logging.googleapis.com Cloud Logging API monitoring.googleapis.com Cloud Monitoring API oslogin.googleapis.com Cloud OS Login API servicemanagement.googleapis.com Service Management API serviceusage.googleapis.com Service Usage API sql-component.googleapis.com Cloud SQL sqladmin.googleapis.com Cloud SQL Admin API storage-api.googleapis.com Google Cloud Storage JSON API storage-component.googleapis.com Cloud Storage storage.googleapis.com Cloud Storage API
認証情報(サービスアカウントキー)の作成
Mackerel が使うサービスアカウントを作成し、それに必要な権限を当てていきます。
Cloud Shell ではプロジェクト ID が環境変数 DEVSHELL_PROJECT_ID
に格納されているので、それを使って指定の手間を省きました。ついでに作成するサービスアカウント名も環境変数 ACCOUNT
に格納しておいて使い回します。
# サービスアカウントの名前を環境変数に設定 export ACCOUNT="mackerel-integration" # サービスアカウントを作成 gcloud iam service-accounts create ${ACCOUNT} \ --display-name='Mackerel Integration' \ --description='Mackerel account' # サービスアカウントにポリシーを連結 for role in browser monitoring.viewer compute.viewer cloudsql.viewer appengine.appViewer do gcloud projects add-iam-policy-binding ${DEVSHELL_PROJECT_ID} \ --member=serviceAccount:${ACCOUNT}@${DEVSHELL_PROJECT_ID}.iam.gserviceaccount.com \ --role=roles/${role} done
ここでも Compute Engine だけでなくて Cloud SQL と App Engine も有効にしてますので、気になる方は適当にいじってください。
連結できたらキーファイルを作成します。
どうせあとからコピペするので、ファイルの中身は標準出力に表示させておきます。
# サービスアカウントキーファイルの作成 gcloud iam service-accounts keys create \ --iam-account=${ACCOUNT}@${DEVSHELL_PROJECT_ID}.iam.gserviceaccount.com \ ${ACCOUNT}.json && \ cat $_
これで、サービスアカウント側の準備は完了ですね!
(OPTIONAL) Mackerel 監視対象リソースにラベルをつける
Mackerel の Google Cloud インテグレーションは、AWS インテグレーションと同様に、Mackerel で監視するリソースをラベルで絞り込めます。AWS でいうところのタグのようなものですね。
せっかくなので設定してみます。
東京リージョンのゾーン A で起動中の Compute Engine のインスタンス instance-1
にラベル monitor
:mackerel
を付ける場合、Cloud Shell のコマンドは下記のようになります。
gcloud compute instances update \ instance-1 \ --zone=asia-northeast1-a \ --update-labels monitor=mackerel
(OPTIONAL) Mackerel のサービス・ロールを用意
いよいよ Mackerel 側の設定にはいります。
Google Cloud インテグレーションで追加されたホストを所属させるサービス・ロールを決めておきましょう。既存のものでもいいし、新規に作るのもありです。
ここではGCP
サービスの下にCompute
ロールを作りました。
これは後ほど設定で使います。
Mackerel にインテグレーションの設定をする
ここはドキュメントどおりですね。
Google Cloud インテグレーションのタブから「新しい Google Cloud インテグレーション設定を登録」をクリック
プロジェクト ID のところには、監視対象のプロジェクトの ID を。
サービスアカウントキーのところに、先ほど作成したキーの内容をコピペします。
入力後、フォームからフォーカスが外れたあとに、正しく認証されるかどうかチェックが入ります。右上に緑のチェックマークがはいったら OK です。
その下も必要項目を埋めましょう。
「現在の連携ホスト数」が意図通り「Compute Engine」x1 となれば OK です!
Mackerel ダッシュボードの「Hosts」の欄から、該当のインスタンスが確認できるかと思います(すこし時間がかかります)。
Compute Engine インスタンスに mackerel-agent を導入する
ここまでで「インテグレーション」としては官僚なんですが、ついでに mackerel-agent も導入します。 該当インスタンスには、下記のコマンドで Cloud Shell から SSH 接続できますね。
$ gcloud beta compute ssh --zone asia-northeast1-a instance-1
こちらは Debian イメージでつくったインスタンスの素の状態なのですが、wget コマンドが入っていないので、インストラクションそのままが使えません。
ここは普通に curl
に置き換えて実行しましょう。あとはセットアップスクリプトが賢く環境を判別してくれます。
$ curl -fsSL https://mackerel.io/file/script/setup-all-apt-v2.sh | MACKEREL_APIKEY='******' sh Superuser authority is required to setup Mackerel agent: + command -v curl /usr/bin/curl + http_get=curl -LfsS + [ curl -LfsS = ] + echo deb [arch=amd64,arm64] http://apt.mackerel.io/v2/ mackerel contrib + curl -LfsS+ apt-key add - https://mackerel.io/file/cert/GPG-KEY-mackerel-v2 OK + apt-get update -qq + apt-get install -y mackerel-agent Reading package lists... Done Building dependency tree Reading state information... Done The following NEW packages will be installed: mackerel-agent 0 upgraded, 1 newly installed, 0 to remove and 1 not upgraded. Need to get 2104 kB of archives. After this operation, 6613 kB of additional disk space will be used. Get:1 http://apt.mackerel.io/v2 mackerel/contrib amd64 mackerel-agent amd64 0.71.0-1.systemd [2104 kB] Fetched 2104 kB in 0s (16.1 MB/s) Selecting previously unselected package mackerel-agent. (Reading database ... 39138 files and directories currently installed.) Preparing to unpack .../mackerel-agent_0.71.0-1.systemd_amd64.deb ... Unpacking mackerel-agent (0.71.0-1.systemd) ... Setting up mackerel-agent (0.71.0-1.systemd) ... Created symlink /etc/systemd/system/multi-user.target.wants/mackerel-agent.service → /lib/systemd/system/mackerel-agent.service. + mackerel-agent init -apikey=******** + systemctl start mackerel-agent ************************************* Done! Welcome to Mackerel! *************************************
connectivity や cpu / memory の詳細、ハードウェア情報などが取得できるようになってますね!
おまけ:後片付けについて
もしインテグレーションを止める場合は、Mackerel 側で設定を削除することはもちろんのこと、Google Cloud 側のサービスアカウントも忘れずに無効化 or 削除しておきましょう。
個人的に、この手の削除作業は GUI で目視しながら行うのが安全でよいと思ってますw
ちなみに Cloud Shell の環境、特にホームディレクトリ配下は 120 日間放置すればまっさらになりますが、明示的に新しくまっさらに作り直したい場合は、下記のドキュメントに従い、下記コマンド実行後に再起動するとといいようです。 GCP さんハードボイルドっすね
sudo rm -rf $HOME
まとめ
GCP と Cloud Shell の勉強を兼ねて、Mackerel の Google Cloud インテグレーションを試してみました。
Cloud Shell はある程度出来合の環境が整えられているし、さくっと作り直せるし、ちょっとした作業を行う捨て環境としては最適ですね。
Mackerel Advent Calendar 2020 も残りあと数日。楽しみましょう!